import os
import logging
from datetime import datetime
##############################
import basicConfig

# 确保日志目录存在
log_dir = basicConfig.LOGS_DIR
os.makedirs(log_dir, exist_ok=True)

# 缓存已配置的日志记录器
configured_loggers = {}

# 定义已知的日志类型
KNOWN_LOG_TYPES = ["debug", "info", "warning", "error", "critical"]


def configure_logger(log_type):
    """
    配置日志记录器。

    :param log_type: 日志类型，用于生成日志文件名
    :return: 配置好的日志记录器
    """
    current_time = datetime.now().strftime("%Y-%m-%d")
    log_filename = f"{log_type}_{current_time}.log"
    log_path = os.path.join(log_dir, log_filename)
    logger = logging.getLogger(log_type)
    logger.setLevel(logging.DEBUG)

    # 文件处理器
    file_handler = logging.FileHandler(log_path, mode="a")
    file_handler.setLevel(logging.DEBUG)
    file_formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
    file_handler.setFormatter(file_formatter)
    logger.addHandler(file_handler)

    # 控制台处理器
    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.INFO)
    console_formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
    console_handler.setFormatter(console_formatter)
    logger.addHandler(console_handler)

    # 将配置好的日志记录器缓存起来
    configured_loggers[log_type] = logger
    return logger


def get_logger(log_type):
    """
    获取或配置日志记录器。

    :param log_type: 日志类型
    :return: 配置好的日志记录器
    """
    if log_type in KNOWN_LOG_TYPES and log_type not in configured_loggers:
        configure_logger(log_type)
    elif log_type not in KNOWN_LOG_TYPES:
        # 如果是未知类型，返回 error 类型的日志记录器
        if "error" not in configured_loggers:
            configure_logger("error")
        return configured_loggers["error"]
    return configured_loggers[log_type]


def produce_logs(log_type, log_content):
    """
    记录日志。

    :param log_type: 日志类型
    :param log_content: 日志内容
    """
    if log_type in KNOWN_LOG_TYPES:
        logger = get_logger(log_type)
        if log_type == "debug":
            logger.debug(log_content)
        elif log_type == "info":
            logger.info(log_content)
        elif log_type == "warning":
            logger.warning(log_content)
        elif log_type == "error":
            logger.error(log_content)
        elif log_type == "critical":
            logger.critical(log_content)
    else:
        # 将未知类型的日志信息追加到 error 日志文件中
        error_logger = get_logger("error")
        error_logger.error(f"Unknown log type: {log_type}. Log content: {log_content}")
